home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / utils / pvquan16 / giflib / egif_lib.c < prev    next >
Text File  |  1992-11-30  |  14KB  |  442 lines

  1. { draw image }
  2.      Delay(PauseTime);
  3. {     PutImage(X, Y, Saucer^, XORput);                 { erase image }
  4.      MoveSaucer(X, Y, lrx - ulx + 1, lry - uly + 1);  { width/height }
  5.   until KeyPressed;
  6.   FreeMem(Saucer, size);
  7.   WaitToGo;
  8. end; { PutImagePlay }
  9.  
  10. procedure PolyPlay;
  11. { Draw random polygons with random fill styles on the screen }
  12. const
  13.   MaxPts = 5;
  14. type
  15.   PolygonType = array[1..MaxPts] of PointType;
  16. var
  17.   Poly : PolygonType;
  18.   I, Color : word;
  19. begin
  20.   MainWindow('FillPoly demonstration');
  21.   StatusLine('Esc aborts or press a key...');
  22.   repeat
  23.     Color := RandColor;
  24.     SetFillStyle(Random(11)+1, Color);
  25.     SetColor(Color);
  26.     for I := 1 to MaxPts do
  27.       with Poly[I] do
  28.       begin
  29.         X := Random(MaxX);
  30.         Y := Random(MaxY);
  31.       end;
  32.     FillPoly(MaxPts, Poly);
  33.   until KeyPressed;
  34.   WaitToGo;
  35. end; { PolyPlay }
  36.  
  37. procedure FillStylePlay;
  38. { Display all of the predefined fill styles available }
  39. var
  40.   Style    : word;
  41.   Width    : word;
  42.   Height   : word;
  43.   X, Y     : word;
  44.   I, J     : word;
  45.   ViewInfo : ViewPortType;
  46.  
  47. procedure DrawBox(X, Y : word);
  48. begin
  49.   SetFillStyle(Style, MaxColor);
  50.   with ViewInfo do
  51.     Bar(X, Y, X+Width, Y+Height);
  52.   Rectangle(X, Y, X+Width, Y+Height);
  53.   OutTextXY(X+(Width div 2), Y+Height+4, Int2Str(Style));
  54.   Inc(Style);
  55. end; { DrawBox }
  56.  
  57. begin
  58.   MainWindow('Pre-defined fill styles');
  59.   GetViewSettings(ViewInfo);
  60.   with ViewInfo do
  61.   begin
  62.     Width := 2 * ((x2+1) div 13);
  63.     Height := 2 * ((y2-10) div 10);
  64.   end;
  65.   X := Width div 2;
  66.   Y := Height div 2;
  67.   Style := 0;
  68.   for J := 1 to 3 do
  69.   begin
  70.     for I := 1 to 4 do
  71.     begin
  72.       DrawBox(X, Y);
  73.       Inc(X, (Width div 2) * 3);
  74.     end;
  75.     X := Width div 2;
  76.     Inc(Y, (Height div 2) * 3);
  77.   end;
  78.   SetTextJustify(LeftText, TopText);
  79.   WaitToGo;
  80. end; { FillStylePlay }
  81.  
  82. procedure FillPatternPlay;
  83. { Display some user defined fill patterns }
  84. const
  85.   Patterns : array[0..11] of FillPatternType = (
  86.   ($AA, $55, $AA, $55, $AA, $55, $AA, $55 üÖü üÖü  !BBäx!!!BBäx!BBäx"""DDêp""DDêp>"""BBääêp""!"BDäêêp>IÉÆ|      ° @≥î>00>><Dêx  !BBäx""DDêp&<"DDêê&22TTêêê$> $< @äêp>          ⁿBBBB<  @@Ç****DDDDDDDU¬U¬U¬U¬U¬U¬U¬▌w▌w▌w▌w▌w▌w▌w°°°≥■°°≥≥■≥≥■■°°°    ≤  ≤  ≤≤         °                     ≡≡≡≡≡≡≡≡≡≡≡≡≡≡       ;DDD;    $"Bdÿ>@@@>||>Ac]AAA1N"A""2,  `1NA"*III*<Bü üB<<BüüüB<A" \"QIE" < <BBBB  @@    ~ ?  @ÇB$$B ""A$$"AII6 üBr»$**IIII**ccregion.  The region is defined as any pixel of
  87.             OldColor which has a path of pixels of OldColor or NewColor
  88.             with sides touching back to the seed point, (XSeed, YSeed).
  89.             Therefore, only pixels of OldColor are modified and no other
  90.             information is changed.
  91.  
  92.             SEE ALSO
  93.  
  94.             DRWFILLBOX, DRWFILLCIRCLE, DRWFILLELLIPSE, FILLAREA,
  95.             FILLCONVEXPOLY, FILLPAGE, FILLPOLY, FILLSCREEN, FILLVIEW,
  96.             SETVIEW
  97.  
  98.             EXAMPL(HNxHHO$B<BBBB<$<BBBB<<BBBB<$BBBBBF:0BBBBF:$BBBF:B<""AAA""AAAAA"<B@@B<" <2\A">>xDDxDNDD <` <>BB= > <BBBB< BBBBF:2L\bBBBB&AaQIECA8$>""">0@@A>@@@ b$(. b$(*
  99.     $    $    $DDDDDDD¬U¬U¬U¬U¬U¬U¬Uw▌w▌w▌w▌w▌w▌w▌°°°⌠ⁿ°°⌠⌠ⁿ⌠⌠ⁿⁿ°°°    ≈  ≈  ≈≈         °                     ≡≡≡≡≡≡≡≡≡≡≡≡≡≡       7HH7"B\DBBRL~BB@@@@@@?R~!!~?DDDD8BBBB|@@Ç>P>III>"AA""AAA"Uw<DDDD86II6"EIQ"\ @@ "AAAAA> >     hH02L2L$$<H(,$<>>>>>>>         VMODE=VIDEOMODEGET
  100.             IF WHICHVGA = 0 THEN STOP
  101.             DUMMY=RES640
  102.             SETVIEW 100, 100, 539, 379
  103.             FILLVIEW 10
  104.             WHILE INKEY$ = ""
  105.             WEND
  106.             VIDEOMODESET VMODE
  107.             END
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.                                                                          63
  125.  
  126.  
  127.  
  128.  
  129.  
  130.           FONTGETINFO
  131.  
  132.             PROTOTYPE
  133.  
  134.             SUB FONTGETINFO (Width%, Height%)
  135.  
  136.             INPUT
  137.  
  138.             no input parameters
  139.     WEND
  140.             MOUSEEXIT
  141.             VIDEOMODESET VMODE
  142.             END
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.                                                                          86
  184.  
  185.  
  186.  
  187.  
  188.  
  189.           MOUSECURSORDEFAULT
  190.  
  191.             PROTOTYPE
  192.  
  193.             SUB MOUSECURSORDEFAULT ()
  194.  
  195.             INPUT
  196.  
  197.             no input parameters
  198.  
  199.             OUTPUT
  200.  
  201.             no value returned
  202.  
  203.             USAGE
  204.  
  205.             MOUSECURSORDEFAULT defines the mouse cursor to be a small
  206.        ,K$╖┼╘╤░XQ)σ┤ö≡÷┴─┤àñT┘,╘¬àñX9╘⌠àñ\9╘UÜ╢≤`9╘4a╘d9╘UTa╘h9╘ta╘l9╘Uöa╘p9╘┤a╘t┘PT±x┴îÇ╖0▓ïα│ÅαU┤ôα╡ùα╢¢α╖úΓ╘pǺΓ╕¡αë ╚┴πì°sKÉφb<$⌡▌ë     φë φë I1φë  Eφë $YφÆë (mφë ,üφë 0$òφë á⌐φë ñ╜φë I¿╤φë ¼σφë ░∙φÆë 4²ë ┤!²ë ╕$5²ë ╝I²ë └]²ë ⌐8q²ë <àⁿΦiǬ∙PÖÇ ¥Ç
  207. ⁿ░╨â@%8@ΓΦá╝╤░≡cÑÅ*$░╕≡ż≡τ╥m¿⌡ε    ╨@#µ≈$âh$âαra╨à`¥è∩Ç%Ç +─▀ TîcOî∩â°1<@  [$¿Ç¼ MMl·0ƒ Y¼─!%6a▐è ¥ì ßá+?±  P<îaTTV ╪iÇ¡≥░ `_ñ»%Çá᪠P█º»ε`éa∙É%H«┴íA%Gár∙É
  208. iw∙Éiφ`╧≥≡╤Çmⁿ▒
  209. ]ÆAáσw7░⌡∩    $·╟Ç√É&^`  ┐ $ⁿ  $■ $╒ nk$J-ÉQ1£PéBù »0αQ/Ñ4╜£░ºP≈Ñ4Ç⌡$(ª▀$@C]Æé≈└╕_SÇçÑ4=iÉ⌠ä╣<_np@Ñ45ò▒Y3ü¼Qí░.i>╠@5+┴╙É╛╙$@ #┴@«╦
  210. $╤
  211. #@Ñú4,p&e÷ü¼_ÇQºÑ4òQ  ü@;¡_áQ@e╠≥@mp!┤a╘O░√`Pñź ÇT°8ÿ!¼Åñ$½╙"q¿ PñCÇ¿α√└╥░eT"ß<p°%Pæ(╧%pδ¥/OêW0Ǽbφ φ B@[â¼8â≥µ≤(    ¿⌡%(Ç∩áTÿp+ óÜ▓0!Σ±(1±░┤ÖÇD└D0Å╡`   $ «îO@╧1
  212. a╝╤j-0ñ│`@╖bΦaT1═⌠╝╤Σ²¼±,1öíî9lÿ28ÇÅ`Γî¿P²$,N0┴O0a╫δ≤0σú`°î╖#0δ≡└X▄1»Σî(▒¥Ç█Ñ"qá√1CÇú╟╨º Å
  213. FT Θ²î└1ÇY0    w ²à░$@AÅ`╦Φ¼╘`▄1A  }┐Ç*5 ΩSδδî`¼îaδæ¼î5 1¿⌡Ω╜⌠ ¼¥╬ü└Qî1S╛≤î9╨iÇ,∙PU(}Ç$üÇ àÇ`σìÇ`QαÜBO$%ÿÇ╧"$Ç«Ç]É.┬\`%WÉ$  W0 ÄâO0]αG┬ur╩░£▒Q¢ú╔Ç≡°s?`X0╘`@ µWâ@╣aá εdq`¥9?Ç&+o0µyÄΣAÅuV(7P╬±@IdQ╕@Å┤@;Ç▓?Çò│CÇ┤╟╨╡KÇÄ30ⁿφ° ó╬ì+]Ä╦≡     Mö╝σ ²y5<!└▀óâ╝É3~mp    $<╛≤9Æ-2ⁿ≡@T,╞Σa,)Pæ└¥#¼╪Q┤S(¼@Aîa≡╤@Ö²±⌠KëD─┴▒▀0╨Ñ$╩-0 ╨ê*╙▓edm`î=3Kß-10è=≥≤²└£mîjy ÿe²ⁿ╨i╕e▓ΣmαÖ╢C%Ç*ê*0 EátQZ`mÄLP%    °üⁿªüNQ∙  T¿<qtWΩc z░ÅÇñΩçǪçÇ«;└<┐á¼¥. á?<Σscî)áí := 0;
  214.       end;
  215.     end;
  216.   end;
  217.   WaitToGo;
  218. end; { UserLineStylePlay }
  219.  
  220.  
  221. procedure SayGoodbye;
  222. { Say goodbye and then exit the program }
  223. var
  224.   ViewInfo : ViewPortType;
  225. begin
  226.   MainWindow('');
  227.   GetViewSettings(ViewInfo);
  228.   SetTextStyle(TriplexFont, HorizDir, 4);
  229.   SetTextJustify(CenterText, CenterText);
  230.   with ViewInfo do
  231.     OutTextXY((x2-x1) div 2, (y2-y1) div 2, 'That''s all folks!');
  232.   StatusLine('Press any key to quit...');
  233.   repeat until KeyPressed;
  234. end; { SayGoodbye }
  235.  
  236.  
  237. PROCEDURE SelectMode;
  238. VAR
  239.     choice1,choice2     : CHAR;
  240.    xsize,ysize            : WORD;
  241. BEGIN
  242.     (* Let's select a mode *)
  243.     ClrScr;
  244.     WriteLn('VESADEMO:');
  245.     WriteLn('1. 256 colors');
  246.     WriteLn('2. 32768 colors');
  247.     WriteLn('3. 65536 colors');
  248.     WriteLn('4. 16777216 colors');
  249.     WriteLn('Q uit');
  250.     WriteLn;
  251.     Write('Your choice: ');
  252.     REPEAT
  253.         ReadLn(choice1);
  254.       IF choice1 <> '1' THEN BEGIN
  255.           WriteLn('Sorry !');
  256.          WriteLn('This demo wasn''t written for more as 256 colors !');
  257.          WriteLn('You would only get a limited impression of the Hi-& TrueColor modes...');
  258.          WriteLn('Switching to 256 colors.');
  259.          choice1 := '1';
  260.       END;
  261.     UNTIL choice1 IN ['1'..'4','q'];
  262.     IF choice1 = 'q' THEN Halt;
  263.  
  264.     WriteLn;
  265.     WriteLn;
  266.     WriteLn('a. 320x200');
  267.     WriteLn('b. 640x480');
  268.     WriteLn('c. 800x600');
  269.     WriteLn('d. 1024x768');
  270.     WriteLn('e. 1280x1024');
  271.     WriteLn('Q uit');
  272.     WriteLn;
  273.     Write('Your choice: ');
  274.     REPEAT
  275.         ReadLn(choice2);
  276.     UNTIL choice2 IN ['a'..'e','q'];
  277.     IF choice2 = 'q' THEN Halt;
  278.  
  279.     CASE choice2 OF
  280.         'a' : BEGIN
  281.             xsize := 320;
  282.             ysize := 200;
  283.         END;
  284.         'b' : BEGIN
  285.             xsize := 640;
  286.             ysize := 480;
  287.         END;
  288.         'c' : BEGIN
  289.             xsize := 800;
  290.             ysize := 600;
  291.         END;
  292.         'd' : BEGIN
  293.             xsize := 1024;
  294.             ysize := 768;
  295.         END;
  296.         'e' : BEGIN
  297.             xsize := 1280;
  298.             ysize := 1024;
  299.         END;
  300.     END;
  301.     CASE choice1 OF
  302.         '1' : mode := FindVesaMode(xsize,ysize,8);
  303.         '2' : mode := FindVesaMode(xsize,ysize,15);
  304.         '3' : mode := FindVesaMode(xsize,ysize,16);
  305.         '4' : mode := FindVesaMode(xsize,ysize,24);
  306.     END;
  307.     IF mode = 0 THEN BEGIN
  308.         WriteLn('No such mode could be found !');
  309.         WriteLn('Switching to to 320x200.');
  310.         ReadKey;
  311.         mode := V320x200x256;
  312.     END;
  313. END;
  314.  
  315. begin { program body }
  316.   SelectMode;
  317.   Initialize;
  318.   ReportStatus;
  319.  
  320. {  AspectRatioPlay; }
  321.   FillEllipsePlay;
  322.   SectorPlay;
  323.   WriteModePlay;
  324.  
  325.   ColorPlay;
  326.   { PalettePlay only intended to work on these drivers: }
  327.   if (GraphDriver = EGA) or
  328.       (GraphDriver = EGA64) or
  329.       (GraphDriver = VGA) then
  330.      PalettePlay;
  331.   PutPixelPlay;
  332. {  PutImagePlay; }
  333.   RandBarPlay;
  334.   BarPlay;
  335.   Bar3DPlay;
  336.   ArcPlay;
  337.   CirclePlay;
  338.   PiePlay;
  339.   LineToPlay;
  340.   LineRelPlay;
  341. {  LineStylePlay; }
  342. {  UserLineStylePlay; }
  343.   TextDump;
  344.   TextPlay;
  345.   CrtModePlay;
  346.   FillStylePlay;
  347.   FillPatternPlay;
  348.   PolyPlay;
  349.   SayGoodbye;
  350. {  CloseGraph; }
  351.   CloseVesa;
  352. end.
  353. ***************************************************
  354.     '* SHOW D2ROTATE (ABOUT THE ORIGIN)
  355.     '****************************************************************∞╥≤c≤*φè#^│v/╒:j═φ0t+l▓ô"¬"g└≡?%ªêΣ│H╫½╫╜├¿U'╒⌐⌡ ßV?╩¬ujOΦçEZ1∞▐! ▄B╛Σ8║æ]1GlNÜ┐q▌▓;ô$ΦzE<cª*bEô#ä╧ñÅ"∩─LrdaÖ ╠º╫a^¥£å╬1~)@ëÖMδ╫0═6DäFê¬Çv┼ß╨kæpτ╪É)}ª 1w3╤╧ü⌡¥╓h▓╣≈ïÅaÑ[TⁿHqªÉ╝DKÄ─Y-∞tT╤Θ╨º╟╪.*ÇI9lΦ≈{πτcσ$τπßoFr╪╨∩┼╞╟;O2■e²LÜ4^N|╪½ÅO?╔°FOz`╟╟╟'<>>π$πΘù6·Xgî╖│°oîδπGƒd╝▀░?■╪╔_9L ⌡ôⁿq'æO▀ƒn4╔▀╚▄┼3pτ.òO°·}÷╕ⁿ±'æO?ít│!√8ßÑ≤/┐╣p┼≥┘E╦Vox╕cΦé5╟╚º╙$?√$≥ΘZεsî≡åìΓpKù¢ïß X╥ 9╞≈\µk┤O¥_ 5Üö\≤éÄ┌╤A[╤ÿáï┼éNⁿÅu16    g,%hc╙╨cD╨Vï┘R¢öKñR;8εáΣ╢╪ós╤π╡á└èxgzPÄMú╫yαºÉ+σJ¢i+▓â3╥    ═Ñ╙î^ºG▓█πérφçs %#(╗⌠?┼%u8≡6+QÉ))ò)Afw≈╣╪)B&4░åLXV:δät@Å.;5Φf╢Ät┐ΣJ╫─U8úÇ╟éö£╕p╔┴⌠vg╨╬╥é÷╪╣┬ΓI.ç≡^v╤ZΦÇ& ╒┌6ñô6XßNè╡╬E₧Ñ
  356. kIº╠▄A+╣╥éb²tæ-Y¡½αÑa═uuîÇ╢αêvhuª╡SÅ┤vèùú¥F;p<d⌐/F─d█éT%▓KΦû=q■öI┐ ┐╠6S$▒÷╚ENΩ¥Fû9╔┌R'╝ ╧φ└?g┬j▓0═/b╖₧─mûé╢┌»ÿÄë/·<éò■░╤╟╢├Xσ:╥P3Θ"╬Læsφ░┌öSö!╗¿*mN£WΣÇ£┤~#╗ææ≥RΩóh:à▌.æ≈╕▌v£äàd▒à╒├=░╖π║$howeg*╬    6ù▄ƒô╕φ░Ö╢qΘD>(w@úKεHÆ╛öúΣU
  357. éÜR╔╤W▄èê 2M%ó.▓SNÖA1ùJE╢║l]▓¿>\%└Å4ßO▄£â⌐& ê/)8vSP▀▓ôⁿææ√ü√ÑÄa⌠â╚4S╓╟P- ?Σá╕▓Næ*q╡UΘ▓≈^ñ·I.rúR&$Y^╚%è≡B┌≈Ceat
  358.     Color := RandColor;
  359.     SetColor(Color);
  360.     SetFillStyle(Random(CloseDotFill)+1, Color);
  361.     Bar3D(Random(MaxWidth), Random(MaxHeight),
  362.           Random(MaxWidth), Random(MaxHeight), 0, TopOff);
  363.   until KeyPressed;
  364.   WaitToGo;
  365. end; { RandBarPlay }
  366.  
  367. procedure ArcPlay;
  368. { Draw random arcs on the screen }
  369. var
  370.   MaxRadius : word;
  371.   EndAngle : word;
  372.   ArcInfo : ArcCoordsType;
  373. begin
  374.   MainWindow('Arc / GetArcCoords demonstration');
  375.   StatusLine('Esc aborts or press a key');
  376.   MaxRadius := MaxY div 10;
  377.   repeat
  378.     SetColor(RandColor);
  379.     EndAngle := Random(360);
  380.     SetLineStyle(SolidLn, 0, NormWidth);
  381.     Arc(Random(MaxX), Random(MaxY), Random(EndAngle), EndAngle, Random(MaxRadius));
  382.     GetArcCoords(ArcInfo);
  383.     with ArcInfo do
  384.     begin
  385.       Line(X, Y, XStart, YStart);
  386.       Line(X, Y, Xend, Yend);
  387.     end;
  388.   until KeyPressed;
  389.   WaitToGo;
  390. end; { ArcPlay }
  391.  
  392. procedure PutPixelPlay;
  393. { Demonstrate the PutPixel and GetPixel commands }
  394. const
  395.   Seed   = 1962; { A seed for the random number generator }
  396.   NumPts = 2000; { The number of pixels plotted }
  397.   Esc    = #27;
  398. var
  399.   I : word;
  400.   X, Y, Color : word;
  401.   XMax, YMax  : integer;
  402.   ViewInfo    : ViewPortType;
  403. begin
  404.   MainWindow('PutPixel / GetPixel demonstration');
  405.   StatusLine('Esc aborts or press a key...');
  406.  
  407.   GetViewSettings(ViewInfo);
  408.   with ViewInfo do
  409.   begin
  410.     XMax := (x2-x1-1);
  411.     YMax := (y2-y1-1);
  412.   end;
  413.  
  414.   while not KeyPressed do
  415.   begin
  416.     { Plot random pixels }
  417.     RandSeed := Seed;
  418.     I := 0;
  419.     while (not KeyPressed) and (I < NumPts) do
  420.     begin
  421.       Inc(I);
  422.         PutPixel(Random(XMax)+1, Random(YMax)+1, RandColor);
  423.     end;
  424.  
  425.     { Erase pixels }
  426.     RandSeed := Seed;
  427.     I := 0;
  428.     while (not KeyPressed) and (I < NumPts) do
  429.     begin
  430.       Inc(I);
  431.       X := Random(XMax)+1;
  432.       Y := Random(YMax)+1;
  433.       Color := GetPixel(X, Y);
  434.         if Color = RandColor then
  435.           PutPixel(X, Y, 0);
  436.      end;
  437.   end;
  438.   WaitToGo;
  439. end; { PutPixelPlay }
  440.  
  441. procedure PutImagePlay;
  442. { Demonstrate the GetImage and PutIma